#pragma once

// 将锁封装起来 - 使用时不再需要底层调用接口，直接使用即可

#include <iostream>
#include <pthread.h>

class Mutex
{
public:
    Mutex(pthread_mutex_t *lock_p = nullptr) : lock_p_(lock_p)
    {
    }

    void lock()
    {
        if (lock_p_)
            pthread_mutex_lock(lock_p_);
    }
    void unlock()
    {
        if (lock_p_)
            pthread_mutex_unlock(lock_p_);
    }
    ~Mutex()
    {
    }

private:
    pthread_mutex_t *lock_p_;
};

// 再封装这一层 之后只需要创建该类的对象就可以不用管锁了 
// 自动调用构造函数和析构 也就是自动加解锁
class LockGuard
{
public:
    LockGuard(pthread_mutex_t *mutex) : mutex_(mutex)
    {
        mutex_.lock(); // 在构造函数中加锁
    }
    ~LockGuard()
    {
        mutex_.unlock(); // 在析构函数中解锁
    }

private:
    Mutex mutex_;
};